home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turnbull China Bikeride
/
Turnbull China Bikeride - Disc 1.iso
/
ARGONET
/
PD
/
PROGRAMMING
/
DESKLIBC
/
SOURCES.ZIP
/
DeskLib
/
!DLSources
/
Libraries
/
Menu
/
c
/
FontMenu
< prev
next >
Wrap
Text File
|
1995-07-08
|
3KB
|
149 lines
/*
#### # # # #
# # # # # The FreeWare C library for
# # ## ### # # # # ### RISC OS machines
# # # # # # # # # # # ___________________________________
# # #### ### ## # # # #
# # # # # # # # # # Please refer to the accompanying
#### ### #### # # ##### # ### documentation for conditions of use
________________________________________________________________________
File: Menu.GetFlags.c
Author: Ben Summers
Version: 1.00 (21 Oct 94)
Purpose: Makes a Font menu
*/
#include <string.h>
#include <stdio.h>
#include "DeskLib:Wimp.h"
#include "DeskLib:Menu.h"
#include "DeskLib:SWI.h"
/* minimum version to use font manager font menus * 100 */
#define MIN_NEW_FONT_VERSION 307
#define NEW 0
#define OLD 1
#define UNKNOWN 2
#define XFont_CacheAddr 0x40080 + XOS_Bit
#define XFont_ListFonts 0x40091 + XOS_Bit
static int version = UNKNOWN;
static menu_ptr font_menu = 0;
static int entries;
static int last_ticked = -1;
static BOOL new_font_manager(void)
{
if(version == UNKNOWN) {
int v;
if(SWI(0, 1, XFont_CacheAddr, &v) != 0 || v < MIN_NEW_FONT_VERSION) {
version = OLD;
} else {
version = NEW;
}
}
return version == NEW;
}
menu_ptr Menu_FontMenu(BOOL sysfont, char *tick)
{
if(new_font_manager()) {
return Menu_FontMenu3(sysfont, tick);
} else {
int l;
if(font_menu == 0) { /* make the font menu */
BOOL created = FALSE;
int count = 0;
char name[64];
entries = 0;
do {
if(SWI(4, 3, XFont_ListFonts, 0, (int)name, count, -1, 0, 0, &count) != 0)
return 0;
if(created == FALSE) {
char text[128];
if(sysfont) {
sprintf(text, "System font,%s", name);
entries++;
}
if((font_menu = Menu_New("Fonts", sysfont?text:name)) == 0)
return 0;
created = TRUE;
} else {
font_menu = Menu_Extend(font_menu, name);
}
entries++;
} while(count != -1);
}
if(last_ticked != -1) {
Menu_SetFlags(font_menu, last_ticked, FALSE, FALSE);
last_ticked = -1;
}
if(tick != Menu_FontMenu_NOTICK) {
if(tick == Menu_FontMenu_TICKSYSFONT) {
last_ticked = 0;
} else {
for(l = 0; l < entries; l++) {
if(strcmp(Menu_GetText(font_menu, l), tick) == 0) {
last_ticked = l;
break;
}
}
}
if(last_ticked != -1) {
Menu_SetFlags(font_menu, last_ticked, TRUE, FALSE);
last_ticked = -1;
}
}
return menu_fontmenu = font_menu;
}
return 0;
}
extern char *Menu_FontMenuDecode(int *selection)
{
if(new_font_manager()) {
return Menu_FontMenuDecode3(selection);
} else {
return Menu_GetText(font_menu, *selection);
}
}
/* JS 16 Apr 1995* */
/* Support for DLL */
/*
menu_fontmenu is actually defined in FontMenu3.s, but we will put the
veneer function here...
*/
#ifdef _DLL
extern menu_ptr menu_fontmenu;
menu_ptr *Menu__Ref_fontmenu( void) { return &menu_fontmenu; }
#endif